﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
     public class FuncionarioSetorRepositorioADO
    {
        private Contexto contexto;

         public void Inserir(string login, string setor)
         {
             var strQuery = "";
             strQuery += "insert into FuncionarioSetor (Login, Setor)";

             strQuery += string.Format("values('{0}','{1}') ", login, setor);

             using (contexto = new Contexto())
             {
                 contexto.ExecutaComando(strQuery);
             }
         }

         public void Excluir(string listaId, string login)
         {
             using (contexto = new Contexto())
             {
                 var strQuery = string.Format(" DELETE FROM FuncionarioSetor WHERE Setor in ({0}) and Login='{1}'", listaId, login);
                 contexto.ExecutaComando(strQuery);
             }
         }
       
        public IEnumerable<FuncionarioSetor> ListarFuncionarioSetor( string login)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Setor Id, Nome Setor,Login FROM FuncionarioSetor fs inner join Setor s on fs.Setor=s.Id"+
                    " where Login ='{0}' union select IdSetor, s.Nome + ' - SETOR PRINCIPAL', Login from Funcionario f "+
                    " inner join Setor s on f.IdSetor=s.Id where Login='{0}' order by Nome", login);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        public List<FuncionarioSetor> ListarEmailsFuncionarioSetor(int setor)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT Setor Id, s.Nome Setor,p.Email Login" +
                " FROM FuncionarioSetor fs inner join Setor s on fs.Setor=s.Id"+
                " inner join Funcionario f on f.Login=fs.Login"+
                " inner join Pessoa p on p.Id=f.IdPessoa"+
                " where Setor ={0} and Ativo='1' union " +
                " select IdSetor, s.Nome + ' - SETOR PRINCIPAL', p.Email Login " +
                " from Funcionario f "+
                " inner join Setor s on f.IdSetor=s.Id "+
                " inner join Pessoa p on p.Id=f.IdPessoa"+
                " where f.IdSetor={0} and Ativo='1'" +
                " order by s.Nome", setor);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        public IEnumerable<FuncionarioSetor> ListarFuncionarioSetorExcluir(string setor)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Id, Nome Setor from Setor where Id in ({0})order by Nome", setor);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto2(retornoDataReader);
            }
        }
        public IEnumerable<FuncionarioSetor> ListarFuncionarioSetorDisponivel(string login)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT Id , Nome Setor FROM Setor where Id not in"+
                    " (select Setor from FuncionarioSetor where Login ='{0}'union select IdSetor from Funcionario where Login ='{0}')"+
                    " order by Nome", login);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto2(retornoDataReader);
            }
        }

        private List<FuncionarioSetor> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var funcionarioSetor = new List<FuncionarioSetor>();
            while (reader.Read())
            {
                var TemObjeto = new FuncionarioSetor()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Setor = reader["Setor"].ToString(),
                    Login = reader["Login"].ToString(),
                 };
                funcionarioSetor.Add(TemObjeto);
            }
            reader.Close();
            return funcionarioSetor;
        }
        private List<FuncionarioSetor> TransformaReaderEmListaDeObjeto2(SqlDataReader reader)
        {

            var funcionarioSetor = new List<FuncionarioSetor>();
            while (reader.Read())
            {
                var TemObjeto = new FuncionarioSetor()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Setor = reader["Setor"].ToString(),
                };
                funcionarioSetor.Add(TemObjeto);
            }
            reader.Close();
            return funcionarioSetor;
        }
    }
}
